// 登录拦截/ 权限页面控制
import router from './router'
import store from './store'
import nProgress from 'nprogress'
import 'nprogress/nprogress.css'
import { asyncRoutes } from '@/router'
// 前置导航守卫
// 只要经过导航守卫, 先判断是否有token
const whiteList = ['/login', '/404']
router.beforeEach(async(to, from, next) => {
  // console.log('进入前置守卫')
  console.log(to)
  nProgress.start() // 开启进度条
  if (store.getters.token) {
    if (to.path === '/login') { // 有token禁止访问登录页面
      next('/') // 被强制拦截的页面 不会经过后置导航守卫, 单独控制进度条的关闭
      nProgress.done()
    } else {
      // 先获取用户信息,再进入系统首页
      if (!store.getters.userId) {
        const { roles: { menus }} = await store.dispatch('user/getInfo') // 坑   后期会在这个位置处理权限???
        console.log(menus) // 权限列表
        // 根据个人权限列表 筛选出对应的应有的路由规则 并添加到路由规则上
        const filterRoutes = asyncRoutes.filter(item => menus.includes(item.name))
        console.log(filterRoutes)
        store.commit('user/addFilterRoutes', filterRoutes)
        // 为路由规则新增 addRoutes
        router.addRoutes([...filterRoutes, { path: '*', redirect: '/404', hidden: true }])
        next(to.path) // addRoutes的问题 addRoutes新增的规则路由实例创建的这些规则并不在routes
      }
      next() // 有token想去哪就去哪
    }
  } else {
    // 没有token 可以访问白名单页面
    if (whiteList.includes(to.path)) {
      next()
    } else {
      // 没有token 访问非白名单页面 强制登录
      next('/login')
      nProgress.done()
    }
  }
})

// 后置导航守卫
router.afterEach((to, from) => {
  // console.log('进入后置守卫')
  nProgress.done() // 关闭进度条
})
